<?php
namespace app\factory\wxPay;
use think\facade\Config;
use app\libs\Util;
/**
 * 微信支付
 * Class CearteOrder
 * @package app\factory\wxPay
 */
class CearteOrder
{   
	//小程序支付
	private $appid="";//小程序appID
	private $mch_id="";//商户号
	private $nonce_str;//随机字符串最高32位
	private $body="在线支付";//商品描述
	private $out_trade_no;//订单号
	private $total_fee;//金额
	private $spbill_create_ip;//终端ip
	private $notify_url="";//回调地址
	private $trade_type="JSAPI";//交易类型
	private $openid;//小程序 必传openid
	private $sign;//签名
	private $key="";//秘钥
	
	//构造
    public function __construct()
    {	
    	$this->appid=Config::get('system.wx_pay.app_id');//小程序id
    	$this->mch_id=Config::get('system.wx_pay.mch_id');//获取小程序mch_id
    	$this->key=Config::get('system.wx_pay.key');//获取小程序key
    	$this->notify_url=Config::get('system.wx_pay.notify_url');//获取小程序回调地址
    }

	/**
	* 微信统一下单
	* @param $data[pay_sn]支付编号
	* @param $data[pay_total_fee]支付金额
	* @param $data[openid]微信id
	*/
	public function set_sign($data=[]){
		$this->nonce_str=md5(time());//生成随机字符串
		$this->out_trade_no=$data['pay_sn'];//支付编号
		$this->total_fee=($data['pay_total_fee']*100);//支付价格-单位分
		$this->openid=$data['openid'];//openid
		$this->spbill_create_ip=request()->ip();//终端ip
		
		//ASCII排序
		$strA="";
		$strA.="appid=".$this->appid;
		$strA.="&body=".$this->body;
		$strA.="&mch_id=".$this->mch_id;
		$strA.="&nonce_str=".$this->nonce_str;
		$strA.="&notify_url=".$this->notify_url;
		$strA.="&openid=".$this->openid;
		$strA.="&out_trade_no=".$this->out_trade_no;
		$strA.="&spbill_create_ip=".$this->spbill_create_ip;
		$strA.="&total_fee=".$this->total_fee;
		$strA.="&trade_type=".$this->trade_type;
		$strA.="&key=".$this->key;

		$this->sign=strtoupper(md5($strA));//转大写
		//xml数据
		$xml="";
		$xml.="<xml>";
		$xml.="<appid>".$this->appid."</appid>";
		$xml.="<body>".$this->body."</body>";
		$xml.="<mch_id>".$this->mch_id."</mch_id>";
		$xml.="<nonce_str>".$this->nonce_str."</nonce_str>";
		$xml.="<notify_url>".$this->notify_url."</notify_url>";
		$xml.="<openid>".$this->openid."</openid>";
		$xml.="<out_trade_no>".$this->out_trade_no."</out_trade_no>";
		$xml.="<spbill_create_ip>".$this->spbill_create_ip."</spbill_create_ip>";
		$xml.="<total_fee>".$this->total_fee."</total_fee>";
		$xml.="<trade_type>".$this->trade_type."</trade_type>";
		$xml.="<sign>".$this->sign."</sign>";
		$xml.="</xml>";

		$url="https://api.mch.weixin.qq.com/pay/unifiedorder";//访问微信支付url
		$wxpay=Util::post_request($url,$xml);//访问数据
		$wxpay = json_decode( json_encode( simplexml_load_string($wxpay, 'SimpleXMLElement', LIBXML_NOCDATA) ), true );
		return $wxpay;

	}

}